package com.situ.stmall.config;

import java.io.File;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.situ.stmall.service.PicService;

/**
 * 使用Spring自带的定时任务
 * @author bobzyh
 *
 */
@Component
@EnableScheduling	// 这是一个定时任务的类,定义定时任务 
public class CleanPicTask {

	@Value("${spring.servlet.multipart.location}")
	private String path;
	@Autowired
	private PicService picService;
	
	/** quartz
	 * 清理无用的图片
	 */
	@Scheduled(cron="40 52 14 * * ?")	// 定义一个方法, 作为定时任务
	/* cron 设置一个表达式, 指定在什么时间执行
	 * 		秒 分 时 日 月 周 年
	 * 		*
	 * 		0 0 1 * * ?
	 * 		* /5 * * * * ?
	 */
	public void cleanPic() {
		System.err.println("定时清理图片" + new Date());
		
		// 1. 要清理的图片在哪里?
		File picDir = new File(path);
		
		File[] pics = picDir.listFiles();
		
		// 查询出当前系统下所有的可用图片
		List<String> picList = picService.getAll();
		
		// 遍历这些个图片, 检查它们是不是需要清理
		for (File pic : pics) {
			if (pic.isFile()) {
				String picName = pic.getName();
				
				// 查询判断该图片是否需要清理
				// 图片可能被哪些地方使用
				if ( ! picList.contains(picName)) {
					// 删除该文件 
					pic.delete();
				}
			}
		}
	}
	
	@Scheduled(fixedDelay=24*60*60*1000)
	/*	fixedDelay 设置定时任务的固定时间间隔
	 * 	单位是毫秒
	 *  当项目启动后, 第一次执行, 每隔指定的时间间隔就再次执行.
	 */
	public void test() {
		System.err.println("定时任务" + new Date());
	}
}





